# -*- coding: utf-8 -*-
# author: AZJ
# date: 2024/12/2
# 假如命运扼住了你的咽喉，你就去挠她的咯吱窝
import random

def choose_question():
    q_xingneng_list = ["阐释性能测试实施的整个过程", "脚本是用什么语言开发的？", "性能测试几个人做的？各自负责什么任务？",
                       "性能测试花费了多长时间，什么时候开始的？",
                       "什么是web服务器、应用服务器、数据库服务器？", "网络OSI有几层，每一层常见协议有哪些？",
                       "搭建环境Tomcat或者weblogic等应用服务器如何修改端口以及启动部署服务？",
                       "了解过哪些连接池？以及如何配置连接池？", "除了Jmeter，你还了解哪些性能测试工具？",
                       "性能监测工具了解哪些？",
                       "服务端的部署架构，用了几台服务器，为什么这么配置？你们这个系统的部署中间件用的什么？",
                       "性能测试脚本如何编写的？脚本进行了哪些增强（断言、关联、参数化等）？",
                       "性能测试中哪些交易做了关联？如何识别出需要关联？",
                       '性能测试中各项指标数据是如何获取以及计算的，被测系统的日活或者月活大概多少？',
                       '压测过程中测试数据是如何准备的，以及如何使用的？',
                       '什么是tps、qps、hps、吞吐量，各项指标之间有什么关系？',
                       '混合测试场景如何实现？以及如何确定混合场景实际交易比例？',
                       "什么是集合点？设置集合点有什么意义？jmeter中如何设置固定等待和隐式等待？",
                       "什么是内存溢出？什么场景发现的？如何监控内存溢出问题？如何已解决内存溢出问题？（outof memory：oom）",
                       "如何用命令行生成测试报告？",
                       "什么是分布式负载测试？如何实现？（调度机和执行机的具体使用步骤）如何确定执行机的数量？",
                       "Jmeter中性能指标收集器PMC组件如何使用，以及如何修改占用端口？",
                       "性能测试过程中有发现bug吗？你是如何分析这些bug的？",
                       "数据库方面一般会有哪些性能问题？除了以下的还有哪些？",
                       "如何识别性能瓶颈？压测过程中Tps一直上不去有哪些原因以及怎么优化？",
                       "测试过程中出现性能问题，你会从哪些方面排查问题？", "性能测试常见调优方法举例2-3个？"]
    q_interface_list = ['尽然你对网络这么理解，说一下在浏览器发送一个请求，这整个网络过程发生了什么？',
                        '你了解哪些协议？', 'http:80协议和Soap协议和https：443协议有什么区别',
                        'get请求和post请求区别是什么？', '还了解过其他的请求方式吗？',
                        '在浏览器和服务范围内的Cookies和session的区别？',
                        '那么你在整个接口过程中如何管理会话状态的呢？', '你都用过哪些抓包工具？',
                        'Fiddler的抓包原理是什么?',
                        'https协议的接口如何用jmeter来做测试？', 'Jmeter中如何进行参数化？',
                        '接口中常见的返回状态码有哪些？',
                        '5XX，4XX开头的一般是什么错误？', '接口中的关联怎么做的？', '你系统中的哪些模块之间用到了关联？',
                        '请求报文都是什么格式的?', '比如你负责的xxx的功能接口返回数据报文都有哪些字段？',
                        '你们测试的接口是什么风格的接口？',
                        '一份接口文档里应该包含哪些内容？', '如果没有接口文档你如果做测试？',
                        '如果系统中有还没开发完的接口，但是接口需要从中调取数据你怎么办？',
                        '接口如何使用Fiddler进行弱网测试怎么做？',
                        '我有一个场景，在请求一个接口的时候，需要进行登陆，在Jmeter如何操作？',
                        '我想在请求一个接口之前想修改数据然后在发送，该怎么办？', 'Fiddler怎么打断点？', '测试周期多长？',
                        '测试多少接口？', '写了多少用例？', '在你测试过程中有发现bug吗，比如业务逻辑性bug？',
                        '接口测试的介入时间',
                        '你又是如何断定是前端的bug？还是后端的bug?', '调用第三方接口该怎么进行测试？', '接口测试的必要性',
                        '你们公司的业务状态码你了解那些？', '抓不到包的原因有哪些？', '你了解token是什么吗？',
                        '一个接口请求不通（或页面无法访问）该如何排查',
                        '埋点测试怎么做？', '怎么判断接口的响应数据是对的还是错的',
                        'TCP三次握手和四次挥手，如果只有两次握手会发生啥',
                        'JMeter常用断言方法有哪些？', '接口自动化脚本怎么开发的？']
    q_web_list = ['搭建过程环境的过程中可能会遇到的问题？怎么处理的？','等待方式有几种？区别是什么？',
                      '你在弱网的环境下，最优使用什么等待方式？为什么？','遇到定位不到的元素有可能哪些原因造成的，怎么处理？',
                      'selenium有哪些不同的元素方法？','如何管理自动化的数据？','脚本中怎么进行参数化的？','如果数据太多怎么处理？',
                      '如果要批量造10万条数据，你有什么手段吗？','几个人做的？你主要负责如些工作？','Selenium有哪些组件构成？',
                      'Selenium的执行原理？','脚本对之前功能测试用例的覆盖率是什么？','一天你可以写多少自动化测试用例？','一天开发多少自动化测试脚本？',
                      '什么是POM，为什么要使用它？','举例一下你们遇到过哪些异常，在selenium自动化测试过程中？','如何处理下拉菜单？','什么是页面加载超时？',
                      '如何处理“不受信任的证书”的问题？','浏览器闪退是什么问题？','页面的弹框，窗口切换，框架页都该如何处理?','自动化发现bug多吗？出现的bug率有多少？',
                      '那么这个bug为什么之前的功能测试没有发现呢？在自动化会发现呢','Python都有哪些数据类型','你了解的自动化框架有那些？',
                      'pytest的装饰器有哪些？你用到过那些？','绝对路径和相对路径有什么区别？','在Selenium中如何实现截图，如何实现用例执行失败才截图','如何在pytest中跳过某个失败的测试用例',
                      '深拷贝和潜拷贝的区别？','fixture是如何使用的？','脚本是如何参数化测试的？','pytest相比其他测试框架有以下优势','你会封装自动化测试框架吗？','遇到frame框架页面怎么处理？',
                      '遇到alert弹出窗如何处理？','脚本是如何实现是断言的？','鼠标操作常用函数','运行完成后，如何去自动发送邮件','自动化测试使用的那些库','自动化什么时候执行？','你们这个项目要是执行一次需要多久？',
                      '执行完成后如何生成结果报告的?','报告是要发给谁？']
    q_app_list = ['app做测试过程中使用过抓日志工具吗？怎么使用的？','会分析日志吗？常见的错误有哪些？可能是什么原因造成的？',
                  'Adb命令有哪些？','兼容性主要功能的测试如何进行？','如果测试更多的手机怎么办？','H5和原生一般谁先开发出来？',
                  '弱网测试怎么实现？2G,3G,4G弱网的范围是多少？','如果想把H5放在手机上进行测试怎么办？','app测试和web测试的区别？',
                  '什么情况下使用原生什么情况下使用H5？','app测试常见抓包工具及使用？','app测试过程中什么是crash和ant，以及产生该现象的原因可能有哪些？',
                  '搭建自动化测试环境遇到哪些问题？怎么处理的？（自动化工具环境，被测试系统环境。）','等待方式有几种？','App是怎么发布版本的？发布的渠道有哪些？',
                  '你们app是强制更新还是非强制更新？','遇到定位不到的元素怎么处理？','appium有哪些不同的元素方法？','如何管理自动化的数据？',
                  '脚本中怎么进行参数化的？','如果数据太多怎么处理？','几个人做的？你主要负责如些工作？','测试过程中有遇到什么困难？怎么克服的？',
                  'Appium连接的5大参数有哪些？','自动化脚本对用例的覆盖率是什么？','一天开发多少自动化测试脚本？','什么是POM，为什么要使用它？',
                  '你觉得自动化测试过程中，需要注意地方有哪些？','app的弱网如何模拟？','app的性能测试监控工具有哪些？','app的adb监控电池电量的命令是什么',
                  'app的性能监控指标有哪些？','app闪退的可能原因？','测过APP的push推送吗？都要考虑哪些测试点','流量指标','电量指标','GPU渲染指标','FPS指标（使用流畅度）','CPU指标','内存指标','响应指标','测试更新的场景','测试安装的场景','测试卸载的场景']
    q_gongneng_list = ['项目上面有几个角色？每个角色的功能是怎么划分的？', '项目上线了吗？上线了为什么还要进行测试？','测试计划里面包含哪些内容？',
                       '如何规划测试进度的？','测试风险有哪些？怎么克服的？','测试范围找谁确认的？','测试过程中有发现一些典型的bug吗？你是怎么定位这些bug的？',
                       '如何进行需求分析的？如何确认需求的？','什么是测试需求？','什么是测试思路？','如何进行需求评审？评审过程中发现了哪些问题？',
                       '如何进行用例评审？评审过程中发现了哪些问题？','我们公司的产品经过了测试，但是到用户现场还出现这样或哪样的问题，质量不高？可能的原因是什么？',
                       '测试归档一般归档哪些内容？归档的好处是什么？','如何进行回归测试？','如何理解基线用例库？','测试报告包括哪些内容？','如何下测试结论的？',
                       '这个项目什么语言开发的？后台用的是什么数据库？','这个项目几个人做的？每个人主要负责哪些事情？项目组总共多少个开发人员？',
                       '这个项目测试周期多长？版本迭代周期多长？','这个项目有多少个测试点？开发了多少条测试用例？','使用什么工具管理测试需求和用例的？使用什么工具管理软件的版本？',
                       'Bug管理工具是什么？','每个环节的时间：写用例用了多长时间？开发用例了多长时间？回归测试用了多长时间？','你能说出你这个项目后台几张表的表名称吗？',
                       '你发布过软件版本吗？怎么发布的？','实际测试过程中，你发现一个bug，开发说不是bug，这样的问题怎么解决？','你是怎么保证测试的模块质量？','黑盒测试与白盒测试的区别是什么？',
                       'App测试与Web端测试有什么区别？','系统是怎么实现的？系统是怎么进行业务交付的？系统采用了哪些技术？系统的技术框架是怎样的？系统架构是怎么设计的？',
                       '简单说一下 bug 等级是如何确定的？']
    q_all_list = q_xingneng_list + q_web_list + q_gongneng_list + q_app_list + q_interface_list
    print("1. 性能测试\n2. 接口测试\n3. web自动化\n4. APP测试\n5. 功能测试\n6. 全流程")
    cho = input(">>")
    if cho == '1':
        return q_xingneng_list
    elif cho == '2':
        return q_interface_list
    elif cho == '3':
        return q_web_list
    elif cho == '4':
        return q_app_list
    elif cho == '5':
        return q_gongneng_list
    elif cho == '6':
        return q_all_list

def one_by_one(q_list):
    for q in q_list:
        print(q)
        inp = input("")
        if inp == "":
            continue

def random_ten(n, q_list):
    for i in range(n):
        random_num = random.randint(0,len(q_list)-1)
        print(q_list[random_num])
        inp = input("")
        if inp == "":
            continue

if __name__ == '__main__':
    q_list = choose_question()
    print("1. 顺序\n2. 随机n个")
    cho = input(">>")
    if cho == "1":
        one_by_one(q_list)
    elif cho == "2":
        n = input("n=")
        random_ten(int(n), q_list)